<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>05.创建对象</title>
</head>
<body>
    <!-- 
     对象：Array Function Object
     对象创建方式的优缺点：
        方式一方式二创建对象只能是Object
                   一次只能创建一个对象
             
                   new Teacher(1001,小明)
                     new Teacher(1002,小红)

     -->

    <script>
        //  方式一创建对象   字面量
        var obj = {
        
        }
        console.log(Object.prototype.toString.call(obj)); // [object Object]
        // 方式二创建对象 
        var obj02 = new Object();
        console.dir(obj02);
        // 方式三  构造函数创建对象
        /*
        构造函数和普通函数
        写法上的区别 
           首字母大写  构造
           首字母小写  普通
        使用上的区别 
           构造函数 调用时 new
           普通函数 调用时 直接调用
        构造函数特点：
           对象的类型就是 函数名
           js中的对象 也有地址概念 和java一模一样
        new的特点： 
           1. 创建一个空对象 
           2. 在对象中生成一个this关键字 指向该对象
           3. this上就可以添加任意的属性和函数
           4. 将this返回给函数的调用者
        */

    
        function Teacher() {
           
        }
        function Student(id,name,say) {
           // console.dir(this);
            this.id = id
            this.name = name
            this.say = say
           
        }
        var tea = new Teacher();
        var stu01 = new Student(1001,"小明",function(){
            console.log(this.name+"在说话。。。");
        });
        var stu02 = new Student(1002,"小红",function(){
            console.log(this.name+"在说话。。。");
        });
        console.log(stu01);
        console.log(stu02);
        stu01.say()
        // console.log(stu01 == stu02);
        // console.dir(tea);
        // console.dir(stu);
        // console.log(tea instanceof Teacher);
        // console.log(stu instanceof Student);
    
     </script>
    
</body>
</html>